/**
 * created by 小卷毛, 2018/3/29 0029
 * Copyright (c) 2018, 416143467@qq.com All Rights Reserved.
 * #                   *********                            #
 * #                  ************                          #
 * #                  *************                         #
 * #                 **  ***********                        #
 * #                ***  ****** *****                       #
 * #                *** *******   ****                      #
 * #               ***  ********** ****                     #
 * #              ****  *********** ****                    #
 * #            *****   ***********  *****                  #
 * #           ******   *** ********   *****                #
 * #           *****   ***   ********   ******              #
 * #          ******   ***  ***********   ******            #
 * #         ******   **** **************  ******           #
 * #        *******  ********************* *******          #
 * #        *******  ******************************         #
 * #       *******  ****** ***************** *******        #
 * #       *******  ****** ****** *********   ******        #
 * #       *******    **  ******   ******     ******        #
 * #       *******        ******    *****     *****         #
 * #        ******        *****     *****     ****          #
 * #         *****        ****      *****     ***           #
 * #          *****       ***        ***      *             #
 * #            **       ****        ****                   #
 */
package com.zhiyou.aifeng.common_ui.base

import android.widget.ImageView
import androidx.annotation.DrawableRes
import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.bitmap.CircleCrop
import com.sunfusheng.GlideImageView
import com.sunfusheng.transformation.BlurTransformation
import com.sunfusheng.transformation.CenterCropRoundCornerTransform
import com.zhiyou.aifeng.common.helper.dp2px
import com.zhiyou.aifeng.common_ui.R
import com.zhiyou.aifeng.common_ui.view.CropTransformation

/**
 * glide图片加载扩展类
 */

/**
 * 加载普通图片 centerCrop
 * 加载中和加载失败时，显示本地资源图片
 */
fun ImageView.loadImage(
    url: String,
    @DrawableRes resourceId: Int = R.mipmap.default_logo
) =
    Glide.with(context)
        .load(url)
        .centerCrop()
        .placeholder(resourceId)
        .error(resourceId)
        .into(this)

/**
 * 加载普通图片 topCrop
 * 加载中和加载失败时，显示本地资源图片
 */
fun ImageView.loadTopImage(
    url: String,
    dpWidth: Float,
    dpHeight: Float,
    @DrawableRes resourceId: Int = R.mipmap.default_logo
) =
    Glide.with(context)
        .load(url)
        .transform(
            CropTransformation(
                dp2px(dpWidth),
                dp2px(dpHeight),
                CropTransformation.CropType.TOP
            )
        )
        .placeholder(resourceId)
        .error(resourceId)
        .into(this)

/**
 * 加载普通图片，不裁剪
 * 加载中和加载失败时，显示本地资源图片
 */
fun ImageView.loadImageNoTransform(
    url: String,
    @DrawableRes resourceId: Int = R.mipmap.default_logo
) =
    Glide.with(context)
        .load(url)
        .placeholder(resourceId)
        .error(resourceId)
        .into(this)

/**
 * 加载图片 centerCrop
 * 加载中显示缩略图(原图的10%)
 * 加载失败时显示本地资源图片
 */
fun ImageView.loadThumbImage(
    url: String,
    @DrawableRes resourceId: Int = R.mipmap.default_logo
) =
    Glide.with(context)
        .load(url)
        .centerCrop()
        .error(resourceId)
        .thumbnail(0.1f)
        .into(this)

/**
 * 加载图片 centerCrop
 * 加载中显示高斯模糊缩略图
 * 加载失败时显示本地资源图片
 */
fun ImageView.loadThumbImage(
    url: String,
    thumbUrl: String = "",
    @DrawableRes resourceId: Int = R.mipmap.default_logo
) =
    Glide.with(context)
        .load(url)
        .centerCrop()
        .error(resourceId)
        .apply {
            if (thumbUrl.isNotEmpty()) {
                Glide.with(context)
                    .load(thumbUrl)
                    .transform(BlurTransformation(context, 5))
            }
        }
        .into(this)

/**
 * 加载方形圆角图片 centerCrop
 * 加载中和加载失败时，使用本地资源图片作为缩略图
 */
fun ImageView.loadRoundedImage(
    url: String,
    radius: Float = 8f,
    @DrawableRes resourceId: Int = R.mipmap.default_logo
) =
    Glide.with(context)
        .load(url)
        .transform(CenterCropRoundCornerTransform(dp2px(radius)))
        .thumbnail(
            Glide.with(context)
                .load(resourceId)
                .transform(CenterCropRoundCornerTransform(dp2px(radius)))
        )
        .into(this)

/**
 * 加载圆形图片
 * 加载中和加载失败时，使用本地资源图片作为缩略图
 */
fun ImageView.loadCircleImage(
    url: String,
    @DrawableRes resourceId: Int = R.mipmap.default_logo
) =
    Glide.with(context)
        .load(url)
        .transform(CircleCrop())
        .thumbnail(
            Glide.with(context)
                .load(resourceId)
                .transform(CircleCrop())
        )
        .into(this)

/**
 * 加载圆形图片
 * 加载中和加载失败时，显示本地资源图片
 */
fun GlideImageView.loadCircleImage(
    url: String,
    @DrawableRes resourceId: Int = R.mipmap.default_logo3
) = loadCircle(url, resourceId)

/**
 * 加载普通图片
 * 加载中和加载失败时，显示本地资源图片
 */
fun GlideImageView.loadRectImage(url: String) =
    load(url, R.mipmap.default_logo)